package 作用域相关;

import java.util.LinkedHashMap;
import java.util.Map;

public abstract class 基础作用域 implements 作用域 {

    public 基础作用域(作用域 外围作用域) {
        this.外围作用域 = 外围作用域;
    }

    public 作用域 外围作用域;

    private final Map<String, 符号> 符号表 = new LinkedHashMap<>();

    @Override
    public 作用域 取父作用域() {
        return 取外围作用域();
    }

    @Override
    public 作用域 取外围作用域() {
        return 外围作用域;
    }

    @Override
    public void 定义(符号 符号) {
        this.符号表.put(符号.名称, 符号);
        符号.所在作用域 = this;
    }

    @Override
    public 符号 解析(String 名称) {
        if (符号表.containsKey(名称)) {
            return 符号表.get(名称);
        }

        if (外围作用域 != null) {
            return 外围作用域.解析(名称);
        }

        return null;
    }
}
